// FirstItem  得到元组类型中的第一个元素

// type FirstItem<T> = T  extends any[] ? T[0] : never
type FirstItem<T> = T extends [infer L, ...infer R] ? L : never
type A = FirstItem<[string, number, boolean]> // string
type B = FirstItem<['B', 'F', 'E']> // 'B'
type C = FirstItem<''> // never
type D = FirstItem<undefined> // unknown
type E = FirstItem<null> // unknown
export {}